package Animation;
import Exceptions.*;
import GameElements.*;
import java.util.ArrayList;

public class CTDDamageTCElement {

	private CTowerDefenseElement tower;
	private ArrayList<String> dmg  = new ArrayList<String>();
	private ArrayList<CTDCreep> creeps  = new ArrayList<CTDCreep>();
	
	public boolean delCreep(CTDCreep _creep) throws FunctionNotImplemented
	{
		throw new FunctionNotImplemented();
	}
	
	/**
	 * Tower Element setzetn
	 * 
	 * @param _tower		Tower
	 * @throws InvalidArgument sollte einer der beiden Bedingungen wahr sein
	 */
	CTDDamageTCElement(CTowerDefenseElement _tower) throws InvalidArgument  
	{
		if(getTower() == null || _tower instanceof CTDCreep) throw new InvalidArgument();
		setTower(_tower);
	}
	
	/**
	 * 
	 * @param _creep	Gegner
	 * @param _dmg		Schaden
	 * @return
	 * @throws InvalidArgument sollte _creep null sein
	 */
	public boolean addCreep(CTDCreep _creep, float _dmg) throws InvalidArgument
	{
		if(_creep == null)
			throw new InvalidArgument();
		for(int i=0;i<creeps.size();i++)
			if(creeps.get(i).getUniqueID() == _creep.getUniqueID())
				{
					float x = Float.valueOf(dmg.get(i)).floatValue();
					dmg.set(i, Float.toString(x + _dmg));
					return true;
				}
		creeps.add(_creep);
		dmg.add(Float.toString(_dmg));
		return true;
	}
	/**
	 * creeps und dmg werden resetet
	 * @throws FunctionNotImplemented
	 */
	public void flush() throws FunctionNotImplemented
	{
		creeps.clear();
		dmg.clear();
	}
	
	
	/**
	 * 
	 * @param _creeps	Gegner
	 * @param _dmg		Schaden
	 * @return	
	 * @throws InvalidArgument sollte _creeps null sein oder der Schaden ungleich
	 */
	public boolean addCreeps(CTDCreep[] _creeps, float[] _dmg) throws InvalidArgument
	{
		if(_creeps == null || _dmg.length != _creeps.length )
			throw new InvalidArgument();
		for(int i=0;i<_creeps.length;i++)
		{
			if(creeps.get(i).getUniqueID() == _creeps[i].getUniqueID())
			{
				float x = Float.valueOf(dmg.get(i)).floatValue();
				dmg.set(i, Float.toString(x + _dmg[i]));
			}
			else
			{
				creeps.add(_creeps[i]);
				dmg.add(Float.toString(_dmg[i]));
			}
		}
		return true;
	}

	public CTowerDefenseElement getTower() {
		return tower;
	}

	public void setTower(CTowerDefenseElement tower) {
		this.tower = tower;
	}
	
}
